最近,hzqtc 推荐了一个GreaseMonkey脚本,可以把Google搜索的结果分两栏显示,自动加载后一页的内容,防止结果经过重定向,还可以为结果编号,加载favicon等等。
这个脚本目前在我这里会有一个问题,会导致Google的“Show more results from xxxx”失效。我会用到这个功能,于是只好不用这个“神一样的GM脚本”了
那么还是有其它做法达到一些关键功能的,比如自动加载后一页可以用Firefox的AutoPager扩展完成,在支持CSS3的Firefox中用Stylish扩展,为搜索结果页应用 .med { -moz-column-count: 2;}
这样的样式就有两栏了。
关于Google把搜索结果重定向,跟踪用户点击这一点,确实令人很不爽。hzqtc曾经介绍的方法现在由于Google使用AJAX加载搜索结果,变得不能用了。那么再做一个可以用的吧
Google搜索结果的链接都写有onmousedown="rwt(....)"
,这个rwt函数会改写用户单击的链接:
window.rwt=function(a,d,e,i,j,f,k,l){ try{ if(a===window){ a=window.event.srcElement; while(a){ if(a.href)break; a=a.parentNode } } var b=encodeURIComponent||escape; var m=["/url?sa=t","\x26source\x3dweb",d?"&oi="+b(d):"",e?"&cad="+b(e):"","&ct=",b(i||"res"),"&cd=",b(j),"&ved=",b(l),"&url=",b(a.href).replace(/\+/g,"%2B"),"&ei=","dIHqSoSTDsOXkAX9huGPDw",f?"&usg="+f:"",k].join(""); a.href=m;a.onmousedown="" } catch(n){} return true }; |
那么不同的对策也有了 :-)
- 消灭(带有rwt函数的)onmousedown
由于Google使用AJAX加载搜索结果,要在其加载完成后才去做这个事情 - 替换掉rwt函数
这里我使用第二种方法,比较简单一些,如何用GreaseMonkey脚本替换一个js函数在GreaseMonkey的Wiki有说明。
最后的脚本就是这样的,可以在这里找到:
function rwt() { return true; } function embedFunction(s) { document.body.appendChild(document.createElement('script')).innerHTML=s.toString().replace(/([\s\S]*?return;){2}([\s\S]*)}/,'$2'); } embedFunction(rwt); |
其实现在Google的重定向分两种,一种是搜索结果本身的重定向,这个就是由onmousedown来做的,我的方法是直接removeAttribute(‘onmousedown’)。而另一种是搜索结果下面的小链接,这些都是有迹可循的,直接把正确的URL提取出来替换掉就行了。
@hzqtc : 似乎现在href写的都是原本的地址了,GM脚本执行的时候Google还没有加载完搜索结果,这时候GM脚本看不到搜索结果的链接,所以你可能要等一等才能去用removeAttribute。
@quark : 现在的情况是,本来Href是正常的,等你点击之后就被rewrite了,所以其实不需要知道搜索结果本来的链接是什么。我就在GM里面把onmousedown事件都remove掉,是ok的呢。
@hzqtc : 果然也是ok的,我在上面提到的方法是把Google rewrite链接的函数重载掉,这样就一劳永逸,不用遍历链接了。
@quark : 那倒是,不过你的代码我不怎么看得懂= =
@hzqtc : 那段看不懂的代码是GreaseMonkey Wiki上的 -.-